package xuecheng.tool.async;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.scheduling.annotation.EnableAsync;

/**
 * 异步任务配置
 *
 * <pre>
 * 处理流程
 * 1. 当一个任务被提交到线程池时，首先查看线程池的核心线程是否都在执行任务，否就选择一条线程执行任务，是就执行第二步。
 * 2. 查看核心线程池是否已满，不满就创建一条线程执行任务，否则执行第三步。
 * 3. 查看任务队列是否已满，不满就将任务存储在任务队列中，否则执行第四步。
 * 4. 查看线程池是否已满，不满就创建一条线程执行任务，否则就按照策略处理无法执行的任务。
 * 在ThreadPoolExecutor中表现为:
 * 如果当前运行的线程数小于corePoolSize，那么就创建线程来执行任务（执行时需要获取全局锁）。
 * 如果运行的线程大于或等于corePoolSize，那么就把task加入BlockQueue。
 * 如果创建的线程数量大于BlockQueue的最大容量，那么创建新线程来执行该任务。
 * 如果创建线程导致当前运行的线程数超过maximumPoolSize，就根据饱和策略来拒绝该任务。
 * </pre>
 *
 * @author PengXueCheng
 * @version 1.0.0
 **/
@SpringBootConfiguration
@EnableAsync(proxyTargetClass = true)
public class CpxAsyncAutoConfig {}
